ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド
リリース7.0
E05173-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

トランザクションが予期せずロールバックされる

考えられる原因
対処
単一のプロセスに2つの接続が関連付けられている(Linuxのみ)

データ・ストアへのマスター接続を作成する

Linuxのプロセス/スレッド・モデルには、単一のプロセスに2つの接続が関連付けられる可能性があるという問題があります。これは、TimesTenエラー863、予期せずにトランザクションがロールバックされる、アプリケーションがハングアップするなどの原因になります。

アプリケーションのメイン・プロセスが、接続を作成するスレッドを生成すると、TimesTenデーモンによって、メイン・プロセスのPIDではなく、生成されたスレッドのPIDが接続ソケットと関連付けられます。ただし、そのソケットはメイン・プロセスに連結されます。

アプリケーションが、接続、切断および終了を繰り返すスレッドを生成した場合、その接続に関連付けられた生成済のスレッドは、メイン・プロセスがまだアクティブなうちに終了する可能性があります。終了したスレッドのPIDが新しいプロセスに割り当てられると、TimesTenデーモンは2つのソケット接続を同じPIDに関連付けることになります。TimesTenデーモンでは、この2つの接続が区別できないため、1つの接続が終了すると、残りのもう1つの接続も同じプロセスの一部であるとみなし、その接続に関連付けられているトランザクションをロールバックしようとします。

この問題を回避するには、スレッドを作成する前にマスター接続を作成し、アプリケーションが終了するまでマスター接続をオープンしたままにしておくようにアプリケーションを変更します。追加の接続は、マスター接続のプロセスに関連付けられます。更新したアプリケーションを実行する前に、TimesTenデーモンを停止して再起動する必要があります。